﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Controllers;

namespace GestorDeFlotasDesktop.Listados
{
    public partial class lstClientes : Form
    {

        #region Inicializador

        public lstClientes()
        {
            InitializeComponent();
        }

        #endregion

        #region Propiedades

        public Operacion operacion { get; set; }

        public Facturacion.Facturacion frmFacturacion { get; set; }
        
        public RegistrarViajes frmRegistrarViaje { get; set; }
        
        public string frm { get; set; }

        private const int registrosPorPagina = 10;

        private string where = "";

        #endregion

        #region Eventos

        private void lstClientes_Load(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void btnLimpiar_Click(object sender, EventArgs e)
        {
            txtNombre.Text = "";
            txtApellido.Text = "";
            txtDni.Text = "";

            where = "";
            lblPagina.Text = "1";
            CalcularCantidadRegistros();
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            where = "";

            if (!string.IsNullOrEmpty(txtNombre.Text))
            {
                where = "Cliente_Nombre like '%" + txtNombre.Text + "%'";
            }
            if (!string.IsNullOrEmpty(txtApellido.Text))
            {
                if (!string.IsNullOrEmpty(where)) where += " AND ";
                where += "Cliente_Apellido like '%" + txtApellido.Text + "%'";
            }

            if (!string.IsNullOrEmpty(txtDni.Text))
            {
                if (!string.IsNullOrEmpty(where)) where += " AND ";
                where += "Cliente_Dni = " + txtDni.Text;
            }

            CalcularCantidadRegistros();
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

        }

        #endregion

        #region Grilla

        private void CalcularCantidadRegistros()
        {
            var cantidadRegistros = ClienteController.ObtenerCantidad(where);

            var cantidadPaginas = cantidadRegistros / registrosPorPagina;
            if (cantidadRegistros % registrosPorPagina > 0) // if remainder is more than  zero 
            {
                cantidadPaginas += 1;
            }

            lblCantidadPaginasTotales.Text = cantidadPaginas.ToString();
        }

        private void CargarGrilla()
        {
            gvwClientes.AutoGenerateColumns = false;
            where = "";
            lblPagina.Text = "1";

            CalcularCantidadRegistros();
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));

            var colId = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Cliente_Id",
                Name = "Cliente_Id",
                HeaderText = "Id",
                ReadOnly = true,
                Width = 50
            };
            gvwClientes.Columns.Add(colId);

            var colApellido = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Cliente_Apellido",
                Name = "Cliente_Apellido",
                HeaderText = "Apellido",
                ReadOnly = true,
                Width = 120
            };
            gvwClientes.Columns.Add(colApellido);

            var colNombre = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Cliente_Nombre",
                Name = "Cliente_Nombre",
                HeaderText = "Nombre",
                ReadOnly = true,
                Width = 120
            };
            gvwClientes.Columns.Add(colNombre);

            var colDni = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Cliente_Dni",
                Name = "Cliente_Dni",
                HeaderText = "Dni",
                ReadOnly = true,
                Width = 120
            };
            gvwClientes.Columns.Add(colDni);

            var colTelefono = new DataGridViewTextBoxColumn
            {
                DataPropertyName = "Cliente_Telefono",
                Name = "Cliente_Telefono",
                HeaderText = "Telefono",
                ReadOnly = true,
                Width = 120
            };
            gvwClientes.Columns.Add(colTelefono);

            var colHabilitado = new DataGridViewCheckBoxColumn
            {
                DataPropertyName = "Cliente_Habilitado",
                Name = "Cliente_Habilitado",
                HeaderText = "Habilitado",
                ReadOnly = true,
                Width = 80
            };
            gvwClientes.Columns.Add(colHabilitado);

            var colBoton = new DataGridViewButtonColumn
            {
                Name = "Boton",
                HeaderText = "",
                ReadOnly = true,
                Width = 80,
                UseColumnTextForButtonValue = true
            };


            switch (operacion)
            {
                case Operacion.Baja:
                    colBoton.Text = "Eliminar";
                    break;
                case Operacion.Modificacion:
                    colBoton.Text = "Modificar";
                    break;
                case Operacion.Seleccion:
                    colBoton.Text = "Seleccionar";
                    break;
                default:
                    break;

            }
            gvwClientes.Columns.Add(colBoton);

        }

        private void gvwClientes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            var Cliente = ((Cliente)gvwClientes.CurrentRow.DataBoundItem);

            if (operacion == Operacion.Seleccion)
            {
                if(frm == "facturacion")
                    frmFacturacion.ClienteSeleccionado = Cliente;
                else if (frm == "registrarViaje")
                    frmRegistrarViaje.clienteseleccionado = Cliente;
                Close();
                return;
            }

            // Ignora clicks que no son a botones 
            if (e.RowIndex < 0 || e.ColumnIndex !=
                gvwClientes.Columns["Boton"].Index) return;

           

            var abmCliente = new AbmCliente
            {
                MdiParent = this.MdiParent,
                operacion = operacion,
                cliente = Cliente,
                parentForm = this
            };

            abmCliente.Show();

        }

        public void ActualizarGrilla()
        {
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void ActualizarGrilla(int pagina)
        {
            lblCartelDe.Visible = true;
            lblPagina.Visible = true;
            lblCantidadPaginasTotales.Visible = true;
            btnUltimaPagina.Enabled = true;
            btnProximaPagina.Enabled = true;
            btnPaginaAnterior.Enabled = true;
            btnPrimeraPagina.Enabled = true;

            lblCartelPagina.Text = "Mostrando página";

            gvwClientes.DataSource = ClienteController.ObtenerTodos(where, pagina, registrosPorPagina);

            var cantidadPaginas = Convert.ToInt32(lblCantidadPaginasTotales.Text);

            if (cantidadPaginas == 1)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;
            }
            else if (cantidadPaginas == 0)
            {
                btnUltimaPagina.Enabled = false;
                btnProximaPagina.Enabled = false;
                btnPaginaAnterior.Enabled = false;
                btnPrimeraPagina.Enabled = false;

                lblCartelDe.Visible = false;
                lblPagina.Visible = false;
                lblCantidadPaginasTotales.Visible = false;

                lblCartelPagina.Text = "No hay registros disponibles";
            }
            else
            {
                if (lblPagina.Text == lblCantidadPaginasTotales.Text)
                {
                    btnUltimaPagina.Enabled = false;
                    btnProximaPagina.Enabled = false;
                }
                else if (lblPagina.Text == "1")
                {
                    btnPrimeraPagina.Enabled = false;
                    btnPaginaAnterior.Enabled = false;
                }
            }
        }

        #endregion

        #region Paginador
        private void btnProximaPagina_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina++;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnPaginaAnterior_Click(object sender, EventArgs e)
        {
            var pagina = Convert.ToInt32(lblPagina.Text);
            pagina--;
            lblPagina.Text = pagina.ToString();
            ActualizarGrilla(pagina);
        }

        private void btnUltimaPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = lblCantidadPaginasTotales.Text;
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }

        private void btnPrimeraPagina_Click(object sender, EventArgs e)
        {
            lblPagina.Text = "1";
            ActualizarGrilla(Convert.ToInt32(lblPagina.Text));
        }
        #endregion

    }
}

